package ReferenceDemo;

import java.lang.ref.WeakReference;

/**
 * 作者  Administrator
 * 时间  2017/1/18 13:10
 * 文件  JAVAOOM
 * 描述  弱引用：强度排在 软引用之后
 * 1. 同样需要引用一个强对象
 * 2. 当强引用去了,软引用中的对象还没有立即被回收
 * 3. 当对象被回收后，软引用中的对象也被回收了
 */
public class WeakReferenceTest {
	public static void main(String[] args) {
		A a = new A();//一个强引用
		WeakReference<A> aWeakReference = new WeakReference<>(a);//新增一个强引用
		a=null;//取出栈内存中的引用
		if (aWeakReference.get()==null){
			System.out.println("a对象被回收了");
		}else {
			System.out.println("a对象没有被回收呢");
		}
		System.gc();
		if (aWeakReference.get()==null){
			System.out.println("a对象被回收了");
		}else {
			System.out.println("a对象没有被回收呢");
		}
	}
	/**
	   运行结果：
	   a对象没有被回收呢
	   a对象被回收了
	   A:finalize
	   回收流程：
	    1. a=null 并不会被回收
	    2. gc 回收
	    3. finalize 释放堆内存
	 */
}
